package com.htgd.gardenexpo.controller;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.github.pagehelper.PageInfo;
import com.htgd.gardenexpo.dto.GeConReservationDTO;
import com.htgd.gardenexpo.entity.*;
import com.htgd.gardenexpo.page.MySportsQuery;
import com.htgd.gardenexpo.service.*;
import com.htgd.gardenexpo.utils.*;
import com.htgd.gardenexpo.vo.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.ArrayUtils;
import org.apache.http.Header;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.message.BasicHeader;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import javax.servlet.http.HttpServletRequest;
import javax.xml.bind.DatatypeConverter;
import java.security.AlgorithmParameters;
import java.security.NoSuchAlgorithmException;
import java.security.Security;
import java.security.spec.InvalidKeySpecException;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.zip.CRC32;

/**
 * @author ：hejing
 * @date ：Created in 2021/5/25 11:05
 * @description：个人中心
 * @menu: 个人中心
 * @modified By：`
 * @version: 1.0
 */
@RestController
@RequestMapping("/api/user")
@Api(tags = "个人中心")
@Slf4j
public class PersonalCenterController {

    public static SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd");
    public static SimpleDateFormat sd=new SimpleDateFormat("yyyyMMddHHmmss");

    private static String pubKey="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCET6dwdyIc3oqdK9WhnCl0eCiegd2IoKZWYeK2F69LuQ3dbRgI7SrHLxYoE3oOKV1kDilzAbONTJStHkVd-iqZk5TurcItBze2vardjpamXXDLkM9-n1kPz16309RrD2xBvd8hRBy-VQy-JDuONG8GaLc1lgADMCiqYzcK7XIirQIDAQAB";

    private static String prKey="MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAIRPp3B3Ihzeip0r1aGcKXR4KJ6B3YigplZh4rYXr0u5Dd1tGAjtKscvFigTeg4pXWQOKXMBs41MlK0eRV36KpmTlO6twi0HN7a9qt2OlqZdcMuQz36fWQ_PXrfT1GsPbEG93yFEHL5VDL4kO440bwZotzWWAAMwKKpjNwrtciKtAgMBAAECgYB_jwe_bqutp4N9mbghUZvJ1NpcTpmU0kTrPP3ETjtLRsKuOjIU0QoP9D5pLrXal1iZUOn3HanMTQt9h5Sa0Mdl27XDLJ37vbItErI2L-i6KAUsr8yOTT94IIbNnjh3J9kBg2k-Yk6DCQCU6FJNbHaP_79hG1YtTdD7-HwUknqEoQJBALoJHjpYBKipbsyWuBEwvLBXS6okaNw1dp2IWDYNDjd1z50JQqKzq5PZZ4nPsim69Lo6nZ1ae1mN-Sy5q_YX_vkCQQC2EiAS4boEl3ebUJH8g11QOHrzL-h-P6Bwbb7Ki8CQNtBm7VqxKO_pboB9hQBi_6PSaWrcTLKzlYTggxA7GspVAkAiVVJ11A6wDez75wj7azI3nTTCpsuPcHJ-qk4VU51_EMgLJE1e96e_tozMOz-XQgCuaejyxGMlaPVGktGwrkcJAkB9qpD8t1QfKzRgvQGmGj1jyzgBdgWwbdYdA4J2ZnMolszM3fKE6M5-fcit2gjkS7IU3rHlEAMftImcNJoVUW5pAkBYzZUUAelGTouD65fQqVfjmAuy1JEFjOgKNjsJUnMpizA6z1UHFWr7SFXryV8oZ9xokxSqTGMR3i5WmXGS1jj8";


    @Resource
    private GeConReservationService geConReservationService;

    @Resource
    private GeBaseUserService geBaseUserService;

    @Resource
    private GeBaseMenuService geBaseMenuService;

    @Resource
    private GeBaseUserRoleService geBaseUserRoleService;

    @Resource
    private GeBaseRoleMenuService geBaseRoleMenuService;

    @Resource
    private GeOuthTokenService geOuthTokenService;

    @Resource
    private GeBaseUserRetailService geBaseUserRetailService;
//
//    @Resource
//    private GeInvoiceStatusService geInvoiceStatusService;

    @Resource
    private GeConTouristNoticeService geConTouristNoticeService;

    @Autowired
    private GeConTheaterMovieService geConTheaterMovieService;

    @Autowired
    private WxUserService wxUserService;

    @Autowired
    private CommonService commonService;

    @Autowired
    private GeConUserCompeteService geConUserCompeteService;

    @Autowired
    private GeConAchievementService geConAchievementService;

    @Autowired
    private IGeConPortraitRulesService geConPortraitRulesService;

    @Autowired
    private IWxUserAchievementService wxUserAchievementService;

    @Autowired
    private GeBaseRoleService geBaseRoleService;


    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Autowired
    private GeBaseDepartService geBaseDepartService;

    @Autowired
    private GeConVenueService geConVenueService;

    @Value("${wx.public.appId}")
    public String appId;
    @Value("${wx.public.appsecret}")
    public String appsecret;
    @Value("${retail.reg_url}")
    public String regUrl;
    @Value("${retail.delete_url}")
    public String deleteUrl;
    @Value("${retail.branId}")
    public String branId;
    @Value("${retail.trans_query}")
    public String transQuery;
    @Value("${retail.tran_info}")
    public String tranInfo;
    @Value("${retail.gift_rule}")
    public String giftRule;
    @Value("${retail.gift_exchange}")
    public String giftExchange;
    @Value("${retail.vip_coupon}")
    public String vipCoupon;
    @Value("${retail.query_url}")
    public String queryUrl;
//    /**
//     * 商户号
//     */
//    @Value("${bill.merchantId}")
//    private String merchantId;
//    /**
//     * 终端号
//     */
//    @Value("${bill.terminalId}")
//    private String terminalId;
//    /**
//     * 消息来源
//     */
//    @Value("${bill.msgSrc}")
//    private String msgSrc;
//
//    @Value("${bill.key}")
//    private String bKey;
//
//    @Value("${bill.url}")
//    private String bUrl;
//
//    @Value("${ticket.url}")
//    private String tUrl;
//
//    @Value("${ticket.userId}")
//    private String tuserId;
//
//    @Value("${ticket.userKey}")
//    private String tuserKey;

    //-------------------------- 入园预约 -----------------------------
    /**
     *查询入园预约记录（区分已完成、进行中、已取消）
     */
    @PostMapping(value = "/reservelist")
    @SecurityParameter
    @ApiOperation("查看预约记录")
    public CommonResult<List<ReserveList>> reservelist(@RequestBody PageQuery pageQuery,
                                                       HttpServletRequest request){
        CommonResult<List<ReserveList>> result = new CommonResult<>();
        try {
            String accessToken = request.getHeader("Access_token");
            String openId = TokenUtil.getUsernameFromToken(accessToken);
            pageQuery.setPageNum((pageQuery.getPageNum()-1)* pageQuery.getPageSize());
            List<ReserveList> list=geConReservationService.reservelist(pageQuery,openId);
            pageQuery.setPageSize(0);
            List<ReserveList> list1=geConReservationService.reservelist(pageQuery,openId);
            result.setCode(200);
            result.setData(list);
            result.setMessage(String.valueOf(list1.size()));
        }catch (Exception e){
            e.printStackTrace();
            result.setCode(500);
        }
        return result;
    }

    /**
     * 查看预约详情
     */
    @GetMapping(value = "/reservedetails")
    @ApiOperation("预约详情")
    public CommonResult<ReservationDetails> reservedetails(int reservationId){
        CommonResult<ReservationDetails> result = new CommonResult<>();
        try {
            ReservationDetails reservationDetails=geConReservationService.reservedetails(reservationId);
            result.setCode(200);
            result.setData(reservationDetails);
        }catch (Exception e){
            e.printStackTrace();
            result.setCode(500);
        }
        return result;
    }

    /**
     * 取消预约
     */
    @PostMapping(value = "/cancelreserve")
    @SecurityParameter
    @ApiOperation("取消预约")
    public CommonResult<JSONObject> cancelreservel(@RequestBody GeConReservation geConReservation){
        CommonResult<JSONObject> result = new CommonResult<>();
        try{
            geConReservationService.update(geConReservation);
            result.setCode(200);
            result.setMessage("取消成功");
        }catch (Exception e){
            e.printStackTrace();
            result.setCode(500);
        }
        return  result;
    }

    /**
     * 新增预约
     */
    @PostMapping(value = "/addreserve")
    @SecurityParameter
    @Transactional
    @ApiOperation("新增预约")
    public CommonResult<String> addreserve(@RequestBody GeConReservationDTO geConReservationDTO,
                                               HttpServletRequest request){
        CommonResult<String> result = new CommonResult<>();
        try{
            String accessToken = request.getHeader("Access_token");
            String openId = TokenUtil.getUsernameFromToken(accessToken);
            if(geConReservationDTO.getDate()!=null){
                LocalDate parse = LocalDate.parse(geConReservationDTO.getDate());
                if(parse.isAfter(LocalDate.now().plusDays(6))){
                    result.setCode(300);
                    result.setMessage("不可预约不合法的日期");
                    return result;
                }
            }
            List<GeConReservation> list=geConReservationService.getInfoByValue(openId,geConReservationDTO.getDate(),geConReservationDTO.getVenueId());
            if (list!=null&&list.size()>0){
                result.setCode(300);
                result.setMessage("今日已经预定过了，请勿重复预约!");
                return result;
            }

            //判断最大预约人数是否超
            long total = geConReservationService.getTotalByDate(geConReservationDTO.getDate(),geConReservationDTO.getVenueId());
            GeConVenue byId = geConVenueService.getById(geConReservationDTO.getVenueId());
            if(total>=byId.getTotal()){
                result.setCode(300);
                result.setMessage("当日预约人数已满，不可预约!");
                return result;
            }
            //是否溢出
            String[] split = geConReservationDTO.getInformationIds().split(",");
            if(split.length+total>byId.getTotal()){
                long remain = byId.getTotal() - total;
                result.setCode(300);
                result.setMessage("所选人数超过今日剩余名额，还可预约"+remain+"人");
                return result;
            }

            String flag = geConReservationService.addreserve(geConReservationDTO,openId);
//            if(flag == null){
//                result.setMessage("请先绑定手机号");
//                result.setCode(300);
//                return result;
//            }
            result.setData(flag);
            result.setCode(200);
        }catch (Exception e){
            e.printStackTrace();
            result.setCode(500);
        }
        return  result;
    }

    @PostMapping(value = "/getReserveTime")
    @ApiOperation("获取预约时间")
    public CommonResult<Map<String,Object>> getReserveTime(){
        CommonResult<Map<String,Object>> result = new CommonResult<>();
        Map<String, Object> stringObjectMap = new HashMap<>();
        stringObjectMap.put("time",LocalDate.now());
        stringObjectMap.put("notice",geConTouristNoticeService.queryById(1).getNoticeContent());
        result.setCode(200);
        result.setData(stringObjectMap);
        return result;
    }


    //---------------------------  酒店预约  ----------------------------

    /**
     * 酒店预约
     */
    @PostMapping(value = "/hotelReserve")
    public CommonResult<JSONObject>  hotelReserve(){
        CommonResult<JSONObject> result = new CommonResult<>();
        return  result;
    }

    //-------------------------- 影片预约记录 -----------------------------
    @PostMapping(value = "/theaterList")
    @SecurityParameter
    @ApiOperation("查看影片预约记录")
    public CommonResult<List<TheaterList>> theaterList(@RequestBody PageQuery pageQuery,
                                                       HttpServletRequest request){
        CommonResult<List<TheaterList>> result = new CommonResult<>();
        try {
            PageInfo<TheaterList> list = geConTheaterMovieService.theaterList(pageQuery,request);
            result.setCode(200);
            result.setData(list.getList());
            result.setMessage(String.valueOf(list.getTotal()));
        }catch (Exception e){
            e.printStackTrace();
            result.setCode(500);
        }
        return result;
    }

    @PostMapping(value = "/cancelTheater")
    @SecurityParameter
    @ApiOperation("取消影片预约")
    public CommonResult<JSONObject> cancelTheater(String id,
                                                       HttpServletRequest request){
        CommonResult<JSONObject> result = new CommonResult<>();
        try {
            geConTheaterMovieService.cancelTheater(id,request);
            result.setCode(200);
            result.setMessage("成功");
        }catch (Exception e){
            e.printStackTrace();
            result.setCode(500);
            result.setMessage("失败");
        }
        return result;
    }

    //-------------------------- 运动记录 -----------------------------
    @PostMapping(value = "/mySportsList")
    @SecurityParameter
    @ApiOperation("查看运动记录")
    public CommonResult<List<HashMap>> mySportsList(@RequestBody MySportsQuery mySportsQuery, HttpServletRequest request){
        String accessToken = request.getHeader("Access_token");
        String openId = TokenUtil.getUsernameFromToken(accessToken);
        log.info("我的运动记录：{},{}",mySportsQuery,openId);
        PageInfo<HashMap> list = commonService.mySportsList(mySportsQuery,openId);
        return CommonResult.success(String.valueOf(list.getTotal()),list.getList());
    }

    //-------------------------- 我的运动 -----------------------------
    @Transactional
    @PostMapping(value = "/mySportsData")
    @SecurityParameter
    @ApiOperation("查看我的运动数据")
    public CommonResult<MySportsDataVO> mySportsData(@RequestBody String data,HttpServletRequest request){
        CommonResult<MySportsDataVO> result = new CommonResult<>();
        try {
            String accessToken = request.getHeader("Access_token");
            String openId = TokenUtil.getUsernameFromToken(accessToken);
            String encryptedData = JSON.parseObject(data).getString("encryptedData");
            String iv = JSON.parseObject(data).getString("iv");
            String code = JSON.parseObject(data).getString("code");
            String sessionKey = wxUserService.getSessionKey(code);
            MySportsDataVO mySportsData = geConUserCompeteService.mySportsData(encryptedData,iv,code,sessionKey,openId);
            result.setCode(200);
            result.setData(mySportsData);
        }catch (Exception e){
            e.printStackTrace();
            result.setCode(500);
            result.setMessage("解密失败");
        }
        return result;
    }

    /**
     * @param encryptedData 加密数据
     * @param iv 加密方式
     * @param sessionKey 微信用code换的钥匙
     * @param days 需要协调的天数
     * @return
     * @throws Exception
     */
    @ApiOperation(value = "获取微信运动步数")
    @GetMapping("/decrypt")
    public CommonResult<JSONObject> decrypt(String encryptedData, String iv, String sessionKey, Integer days) throws Exception{
        CommonResult<JSONObject> result = new CommonResult<>();
        try {
            byte[] resultByte  = AESUtil.decrypt(Base64.getDecoder().decode(encryptedData),
                    Base64.getDecoder().decode(sessionKey),
                    Base64.getDecoder().decode(iv));
            if(null != resultByte && resultByte.length > 0){
                String userInfo = new String(resultByte, "UTF-8");
                result.setMessage("解密成功");
                result.setCode(200);
                result.setData(JSON.parseObject(userInfo));
            }else{
                result.setMessage("解密失败");
                result.setCode(500);
            }
        }catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }


    //-------------------------  家人信息 ----------------------------

    @ApiOperation("获取个人信息")
    @GetMapping(value = "/getInfo")
    public CommonResult<MyDataVO> getInfo(HttpServletRequest request){
        MyDataVO myDataVO = new MyDataVO();

        WxUser wxUser = wxUserService.getInfo(request);
        log.info("个人中心-获取个人信息:{}",wxUser);
        //更新成就
        int updateAchievementNum =  geConAchievementService.updatePersonalAchievement(wxUser);
        //总就数
        int achievementNum = geConAchievementService.getTotalNum(wxUser.getOpenId());
        //我的成就数
        int myAchievementNum = wxUserAchievementService.getNumByOpenId(wxUser.getOpenId());

        myDataVO.setIntegralNum(wxUser.getIntegralNum());
        myDataVO.setUpdateAchievementNum(updateAchievementNum);
        myDataVO.setMyAchievementNum(myAchievementNum);
        myDataVO.setAchievementNum(achievementNum);

        return CommonResult.success("查询成功",myDataVO);
    }

    @ApiOperation("获取个人成就")
    @GetMapping(value = "/getMyAchievement")
    public CommonResult getMyAchievement(HttpServletRequest request){
        WxUser wxUser = wxUserService.getInfo(request);
        log.info("个人中心-获取个人成就:{}",wxUser);
        MyAchievementVO myAchievementVOS = geConAchievementService.getMyAchievement(wxUser);
        return CommonResult.success("查询成功",myAchievementVOS);
    }

    @ApiOperation("获取个人月画像")
    @GetMapping(value = "/getMyMonthPortrait")
    public CommonResult getMyMonthPortrait(HttpServletRequest request){
        String accessToken = request.getHeader("Access_token");
        String openId = TokenUtil.getUsernameFromToken(accessToken);
        log.info("个人中心-获取个人月画像:{}",openId);
        MyMonthPortraitVO myMonthPortrait = geConPortraitRulesService.getMyMonthPortrait(openId);
        return CommonResult.success("查询成功",myMonthPortrait);
    }

    @ApiOperation("获取个人季度画像")
    @GetMapping(value = "/getMyQuarterPortrait")
    public CommonResult getMyQuarterPortrait(HttpServletRequest request){
        String accessToken = request.getHeader("Access_token");
        String openId = TokenUtil.getUsernameFromToken(accessToken);
        log.info("个人中心-获取个人季度画像:{}",openId);
        MyQuarterPortraitVO myQuarterPortrait = geConPortraitRulesService.getMyQuarterPortrait(openId);
        return CommonResult.success("查询成功",myQuarterPortrait);
    }

    @ApiOperation("获取个人年度画像")
    @GetMapping(value = "/getMyYearPortrait")
    public CommonResult getMyYearPortrait(HttpServletRequest request){
        String accessToken = request.getHeader("Access_token");
        String openId = TokenUtil.getUsernameFromToken(accessToken);
        log.info("个人中心-获取个人年度画像:{}",openId);
        MyYearPortraitVO myYearPortraitVO = geConPortraitRulesService.getMyYearPortrait(openId);
        return CommonResult.success("查询成功",myYearPortraitVO);
    }

//    /**
//     *  添加家人信息
//     */
//    @PostMapping(value = "/addfamily")
//    public CommonResult<JSONObject> addfamily(){
//        CommonResult<JSONObject> result = new CommonResult<>();
//        return result;
//    }
//
//    /**
//     * 修改家人信息
//     */
//    @PostMapping(value = "/editfamily")
//    public CommonResult<JSONObject> editfamily(){
//        CommonResult<JSONObject> result = new CommonResult<>();
//        return result;
//    }
//
//    /**
//     * 获取家人列表
//     */
//    @GetMapping(value = "/familylist")
//    public CommonResult<List<Map<String,Object>>> familylist(){
//        CommonResult<List<Map<String, Object>>> result = new CommonResult<>();
//        return result;
//    }
//
//    /**
//     * 获取家人信息详情
//     */
//    @GetMapping(value = "/familydetails")
//    public CommonResult<List<Map<String,Object>>> familydetails(){
//        CommonResult<List<Map<String, Object>>> result = new CommonResult<>();
//        return result;
//    }
//
//
//
//    //------------------------  用户注册 -----------------------------
//
//    /**
//     * 手机号注册接口
//     */
//    @PostMapping(value = "/registeredByphone")
//    @SecurityParameter
//    public CommonResult<JSONObject>  registeredByphone(@RequestBody String s){
//        CommonResult<JSONObject> result = new CommonResult<>();
//        try{
//            String phone=JSON.parseObject(s).getString("phone");
//            Integer code=JSON.parseObject(s).getInteger("code");
//            String password=JSON.parseObject(s).getString("password");
//            List<GeBaseUser> list1=geBaseUserService.getUserByPhone(phone);
//            if (list1!=null&&list1.size()>0){
//                result.setCode(300);
//                result.setMessage("该用户已存在！");
//                return  result;
//            }
////            String query="select * from ge_verification_code where phone="+phone;
//            List<Map<String,Object>> list=jdbcTemplate.queryForList("select * from ge_verification_code where phone=?",new Object[]{phone});
//            if (list==null||list.size()==0){
//                result.setCode(300);
//                result.setMessage("验证码已失效");
//                return result;
//            }
//            String cod=list.get(0).get("code").toString();
//            if (!cod.equals(String.valueOf(code))){
//                result.setCode(300);
//                result.setMessage("验证码错误");
//                return result;
//            }
//            String pwd= RSAUtils.publicEncrypt(password,RSAUtils.getPublicKey(pubKey));
//            GeBaseUser geBaseUser = new GeBaseUser();
//            geBaseUser.setUsername(phone);
//            geBaseUser.setPhone(phone);
//            geBaseUser.setPassword(pwd);
//            geBaseUser.setDelFlag(0);
//            geBaseUserService.insert(geBaseUser);
//            GeBaseUserRole geBaseUserRole = new GeBaseUserRole();
//            geBaseUserRole.setUserId(geBaseUser.getUserId());
//            geBaseUserRole.setRoleId(29);
//            geBaseUserRoleService.insert(geBaseUserRole);
//            addRetailinfo(geBaseUser);
//            result.setCode(200);
//        }catch (Exception e){
//            e.printStackTrace();
//            result.setCode(500);
//        }
//        return result;
//    }
//
//    /**
//     * 手机验证码验证
//     */
//    @PostMapping(value = "/verificationByPhone")
//    @SecurityParameter
//    public CommonResult<JSONObject> verificationByPhone(@RequestBody String s){
//        CommonResult<JSONObject> result = new CommonResult<>();
//        try{
//            String phone=JSON.parseObject(s).getString("phone");
//            Integer code=JSON.parseObject(s).getInteger("code");
//            List<GeBaseUser> list1=geBaseUserService.getUserByPhone(phone);
//            if (list1==null||list1.size()==0){
//                result.setCode(300);
//                result.setMessage("该用户不存在！");
//                return  result;
//            }
////            String query="select * from ge_verification_code where phone="+phone;
//            List<Map<String,Object>> list=jdbcTemplate.queryForList("select * from ge_verification_code where phone=?",new Object[]{phone});
//            if (list==null||list.size()==0){
//                result.setCode(300);
//                result.setMessage("验证码已失效");
//                return result;
//            }
//            String cod=list.get(0).get("code").toString();
//            if (!cod.equals(String.valueOf(code))){
//                result.setCode(300);
//                result.setMessage("验证码错误");
//                return result;
//            }
//            result.setCode(200);
//        }catch (Exception e){
//            e.printStackTrace();
//            result.setCode(500);
//        }
//        return result;
//    }
//
//    /**
//     * 手机验证码重置密码
//     */
//    @PostMapping(value = "/resetByPhone")
//    @SecurityParameter
//    public CommonResult<JSONObject> resetByPhone(@RequestBody String s){
//        CommonResult<JSONObject> result = new CommonResult<>();
//        try{
//            String phone=JSON.parseObject(s).getString("phone");
//            String password=JSON.parseObject(s).getString("password");
//            Integer code=JSON.parseObject(s).getInteger("code");
//            List<GeBaseUser> list1=geBaseUserService.getUserByPhone(phone);
//            if (list1==null||list1.size()==0){
//                result.setCode(300);
//                result.setMessage("该用户不存在！");
//                return  result;
//            }
////            String query="select * from ge_verification_code where phone="+phone;
//            List<Map<String,Object>> list=jdbcTemplate.queryForList("select * from ge_verification_code where phone=?",new Object[]{phone});
//            if (list==null||list.size()==0){
//                result.setCode(300);
//                result.setMessage("验证码已失效");
//                return result;
//            }
//            String cod=list.get(0).get("code").toString();
//            if (!cod.equals(String.valueOf(code))){
//                result.setCode(300);
//                result.setMessage("验证码错误");
//                return result;
//            }
//            String pwd= RSAUtils.publicEncrypt(password,RSAUtils.getPublicKey(pubKey));
//            GeBaseUser geBaseUser=list1.get(0);
//            geBaseUser.setPassword(pwd);
//            geBaseUserService.update(geBaseUser);
//            result.setCode(200);
//        }catch (Exception e){
//            e.printStackTrace();
//            result.setCode(500);
//        }
//        return result;
//    }
//
//    /**
//     * 原密码重置密码
//     */
//    @PostMapping(value = "/resetByPwd")
//    @SecurityParameter
//    public CommonResult<JSONObject> resetByPwd(@RequestBody String s){
//        CommonResult<JSONObject> result = new CommonResult<>();
//        try{
//            Integer user_id=JSON.parseObject(s).getInteger("user_id");
//            String oldPwd=JSON.parseObject(s).getString("oldPwd");
//            String newPwd=JSON.parseObject(s).getString("newPwd");
//            GeBaseUser geBaseUser=geBaseUserService.queryById(user_id);
////            String oldpwd= RSAUtils.publicEncrypt(oldPwd,RSAUtils.getPublicKey(pubKey));
//            String passwd = RSAUtils.privateDecrypt(geBaseUser.getPassword(), RSAUtils.getPrivateKey(prKey));
//            if (!passwd.equals(oldPwd)){
//                result.setCode(300);
//                result.setMessage("原密码错误，请重新输入。");
//                return result;
//            }
//            String pwd= RSAUtils.publicEncrypt(newPwd,RSAUtils.getPublicKey(pubKey));
//            geBaseUser.setPassword(pwd);
//            geBaseUserService.update(geBaseUser);
//            result.setCode(200);
//        }catch (Exception e){
//            e.printStackTrace();
//            result.setCode(500);
//        }
//        return result;
//    }
//
//    /**
//     * App微信授权认证接口
//     */
//    @PostMapping(value = "/registeredByWX")
//    public CommonResult<GeBaseUser> registeredByWX(String openId,String unionid){
//        CommonResult<GeBaseUser> result = new CommonResult<>();
//        try {
//            GeBaseUser geBaseUser = geBaseUserService.getuserinfobyWxopenid(unionid);
//            if (geBaseUser!=null){
//                if (geBaseUser.getIdCard()!=null){
//                    String decodedData = RSAUtils.privateDecrypt(geBaseUser.getIdCard(), RSAUtils.getPrivateKey(prKey));
//                    geBaseUser.setIdCard(decodedData);
//                }
//                String token= TokenUtil.sign(geBaseUser);
//                GeOuthToken geOuthToken1=geOuthTokenService.queryById(token);
//                if (geOuthToken1==null){
//                    GeOuthToken geOuthToken = new GeOuthToken();
//                    geOuthToken.setAccessToken(token);
//                    geOuthToken.setUserId(geBaseUser.getUserId());
//                    geOuthTokenService.insert(geOuthToken);
//                }else {
//                    geOuthToken1.setUserId(geBaseUser.getUserId());
//                    geOuthToken1.setAccessToken(token);
//                    geOuthTokenService.update(geOuthToken1);
//                }
//                result.setMessage(token);
//                result.setCode(200);
//                result.setData(geBaseUser);
//            }else {
//                result.setCode(400);
//                result.setMessage(openId);
//            }
//        }catch (Exception e){
//            e.printStackTrace();
//            result.setCode(500);
//        }
//        return result;
//    }
//
//    /**
//     * app微信注册接口
//     */
//    @PostMapping(value = "/registeredByWxOpenId")
//    public CommonResult<GeBaseUser> registeredByWxOpenId(String phone,int code,String openId,String unionid){
//        CommonResult<GeBaseUser> result = new CommonResult<>();
//        try{
////            String query="select * from ge_verification_code where phone="+phone;
//            List<Map<String,Object>> list1=jdbcTemplate.queryForList("select * from ge_verification_code where phone=?",new Object[]{phone});
//            if (list1==null||list1.size()==0){
//                result.setCode(300);
//                result.setMessage("验证码已失效");
//                return result;
//            }
//            String cod=list1.get(0).get("code").toString();
//            if (!cod.equals(String.valueOf(code))){
//                result.setCode(300);
//                result.setMessage("验证码错误");
//                return result;
//            }
//            List<GeBaseUser> list=geBaseUserService.getUserByPhone(phone);
//            if (list!=null&&list.size()>0){
//                GeBaseUser geBaseUser=list.get(0);
//                geBaseUser.setWxOpenid(openId);
//                geBaseUser.setWxUnionid(unionid);
//                geBaseUserService.update(geBaseUser);
//                if (geBaseUser.getIdCard()!=null){
//                    String decodedData = RSAUtils.privateDecrypt(geBaseUser.getIdCard(), RSAUtils.getPrivateKey(prKey));
//                    geBaseUser.setIdCard(decodedData);
//                }
//                String token= TokenUtil.sign(geBaseUser);
//                GeOuthToken geOuthToken = new GeOuthToken();
//                geOuthToken.setAccessToken(token);
//                geOuthToken.setUserId(geBaseUser.getUserId());
//                geOuthTokenService.insert(geOuthToken);
//                result.setMessage(token);
//                result.setCode(200);
//                result.setData(geBaseUser);
//            }else {
//                GeBaseUser geBaseUser = new GeBaseUser();
//                geBaseUser.setWxOpenid(openId);
//                geBaseUser.setWxUnionid(unionid);
//                geBaseUser.setPhone(phone);
//                geBaseUser.setUsername(phone);
//                geBaseUser.setDelFlag(0);
//                geBaseUserService.insert(geBaseUser);
//                GeBaseUserRole geBaseUserRole = new GeBaseUserRole();
//                geBaseUserRole.setUserId(geBaseUser.getUserId());
//                geBaseUserRole.setRoleId(29);
//                geBaseUserRoleService.insert(geBaseUserRole);
//                String token= TokenUtil.sign(geBaseUser);
//                GeOuthToken geOuthToken1=geOuthTokenService.queryById(token);
//                if (geOuthToken1==null){
//                    GeOuthToken geOuthToken = new GeOuthToken();
//                    geOuthToken.setAccessToken(token);
//                    geOuthToken.setUserId(geBaseUser.getUserId());
//                    geOuthTokenService.insert(geOuthToken);
//                }else {
//                    geOuthToken1.setUserId(geBaseUser.getUserId());
//                    geOuthToken1.setAccessToken(token);
//                    geOuthTokenService.update(geOuthToken1);
//                }
//                addRetailinfo(geBaseUser);
//                result.setMessage(token);
//                result.setCode(200);
//                result.setData(geBaseUser);
//            }
//        }catch (Exception e){
//            e.printStackTrace();
//            result.setCode(500);
//        }
//        return result;
//    }
//
//
//    /**
//     *  微信公众号code验证
//     */
//    @GetMapping(value = "/verifyByWxPublicCode")
//    public CommonResult<GeBaseUser> verifyByWxPublicCode(String code){
//        CommonResult<GeBaseUser> result = new CommonResult<>();
//        try {
//            Map<String,Object> map = new HashMap<>();
//            //获取回调地址中的code
//            //拼接url
//            String url = "appid=" + appId + "&secret="
//                    + appsecret + "&code=" + code + "&grant_type=authorization_code";
//            String res = HttpRequest.sendGet("https://api.weixin.qq.com/sns/oauth2/access_token",url);
//            JSONObject jsonObject= JSON.parseObject(res);
//            if(jsonObject.get("errcode")!=null){
//                Integer errcode = jsonObject.getInteger("errcode");
//                if(null!=errcode){
////                    String errmsg = jsonObject.getString("errmsg");
//                    result.setCode(300);
//                    result.setMessage("验证失败");
//                    return result;
//                }
//            }
//            //1.获取微信用户的openid
//            String openid = jsonObject.getString("openid");
//            //2.获取获取access_token
//            String access_token = jsonObject.getString("access_token");
//            String infoUrl = "access_token=" + access_token + "&openid=" + openid
//                    + "&lang=zh_CN";
//            //3.获取微信用户信息
//            String ress = HttpRequest.sendGet("https://api.weixin.qq.com/sns/userinfo",infoUrl);
//            JSONObject jsonObject1=JSON.parseObject(ress);
//            String unionid=jsonObject1.getString("unionid");
//            //去数据库查询此微信是否注册过
//            GeBaseUser geBaseUser = geBaseUserService.getuserinfobypopenid(unionid);
//            if (geBaseUser!=null){
//                geBaseUser.setPublicOpenid(openid);
////                geBaseUser.setWxUnionid(unionid);
//                geBaseUserService.update(geBaseUser);
//                if (geBaseUser.getIdCard()!=null){
//                    String decodedData = RSAUtils.privateDecrypt(geBaseUser.getIdCard(), RSAUtils.getPrivateKey(prKey));
//                    geBaseUser.setIdCard(decodedData);
//                }
//                String token= TokenUtil.sign(geBaseUser);
//                GeOuthToken geOuthToken = new GeOuthToken();
//                geOuthToken.setAccessToken(token);
//                geOuthToken.setUserId(geBaseUser.getUserId());
//                geOuthTokenService.insert(geOuthToken);
//                result.setMessage(token);
//                result.setCode(200);
//                result.setData(geBaseUser);
//            }else {
//                GeBaseUser geBaseUser1 = new GeBaseUser();
//                geBaseUser1.setWxUnionid(unionid);
//                geBaseUser1.setPublicOpenid(openid);
//                result.setCode(400);
//                result.setData(geBaseUser1);
//                result.setMessage(openid);
//            }
//        }catch (Exception e){
//            e.printStackTrace();
//            result.setCode(500);
//        }
//        return result;
//    }
//
//
//    /**
//     * 微信公众号注册
//     */
//    @PostMapping(value = "/registeredByPublicOpenId")
//    public CommonResult<GeBaseUser> registeredByPublicOpenId(String phone,int code,String publicOpenId,String unionid){
//        CommonResult<GeBaseUser> result = new CommonResult<>();
//        try{
////            String query="select * from ge_verification_code where phone="+phone;
//            List<Map<String,Object>> list1=jdbcTemplate.queryForList("select * from ge_verification_code where phone=?",new Object[]{phone});
//            if (list1==null||list1.size()==0){
//                result.setCode(300);
//                result.setMessage("验证码已失效");
//                return result;
//            }
//            String cod=list1.get(0).get("code").toString();
//            if (!cod.equals(String.valueOf(code))){
//                result.setCode(300);
//                result.setMessage("验证码错误");
//                return result;
//            }
//            List<GeBaseUser> list=geBaseUserService.getUserByPhone(phone);
//            if (list!=null&&list.size()>0){
//                GeBaseUser geBaseUser=list.get(0);
//                geBaseUser.setPublicOpenid(publicOpenId);
//                geBaseUser.setWxUnionid(unionid);
//                geBaseUserService.update(geBaseUser);
//                if (geBaseUser.getIdCard()!=null){
//                    String decodedData = RSAUtils.privateDecrypt(geBaseUser.getIdCard(), RSAUtils.getPrivateKey(prKey));
//                    geBaseUser.setIdCard(decodedData);
//                }
//                String token= TokenUtil.sign(geBaseUser);
//                GeOuthToken geOuthToken1=geOuthTokenService.queryById(token);
//                if (geOuthToken1==null){
//                    GeOuthToken geOuthToken = new GeOuthToken();
//                    geOuthToken.setAccessToken(token);
//                    geOuthToken.setUserId(geBaseUser.getUserId());
//                    geOuthTokenService.insert(geOuthToken);
//                }else {
//                    geOuthToken1.setUserId(geBaseUser.getUserId());
//                    geOuthToken1.setAccessToken(token);
//                    geOuthTokenService.update(geOuthToken1);
//                }
//                result.setMessage(token);
//                result.setCode(200);
//                result.setData(geBaseUser);
//            }else {
//                GeBaseUser geBaseUser = new GeBaseUser();
//                geBaseUser.setPublicOpenid(publicOpenId);
//                geBaseUser.setPhone(phone);
//                geBaseUser.setUsername(phone);
//                geBaseUser.setDelFlag(0);
//                geBaseUserService.insert(geBaseUser);
//                GeBaseUserRole geBaseUserRole = new GeBaseUserRole();
//                geBaseUserRole.setUserId(geBaseUser.getUserId());
//                geBaseUserRole.setRoleId(29);
//                geBaseUserRoleService.insert(geBaseUserRole);
//                String token= TokenUtil.sign(geBaseUser);
//                GeOuthToken geOuthToken = new GeOuthToken();
//                geOuthToken.setAccessToken(token);
//                geOuthToken.setUserId(geBaseUser.getUserId());
//                geOuthTokenService.insert(geOuthToken);
//                addRetailinfo(geBaseUser);
//                result.setMessage(token);
//                result.setCode(200);
//                result.setData(geBaseUser);
//            }
//        }catch (Exception e){
//            e.printStackTrace();
//            result.setCode(500);
//        }
//        return result;
//    }
//
//    /**
//     * 微信小程序授权注册接口
//     */
//    @PostMapping(value = "/registeredByApplets")
//    public CommonResult<GeBaseUser> registeredByApplets(String phone,String applets_openid,String union_id){
//        CommonResult<GeBaseUser> result = new CommonResult<>();
//        try{
//
//            List<GeBaseUser> list=geBaseUserService.getUserByPhone(phone);
//            if (list!=null&&list.size()>0){
//                GeBaseUser geBaseUser=list.get(0);
//                geBaseUser.setAppletsOpenid(applets_openid);
//                geBaseUser.setWxUnionid(union_id);
//                geBaseUserService.update(geBaseUser);
//                if (geBaseUser.getIdCard()!=null){
//                    String decodedData = RSAUtils.privateDecrypt(geBaseUser.getIdCard(), RSAUtils.getPrivateKey(prKey));
//                    geBaseUser.setIdCard(decodedData);
//                }
//                String token= TokenUtil.sign(geBaseUser);
//                GeOuthToken geOuthToken1=geOuthTokenService.queryById(token);
//                if (geOuthToken1==null){
//                    GeOuthToken geOuthToken = new GeOuthToken();
//                    geOuthToken.setAccessToken(token);
//                    geOuthToken.setUserId(geBaseUser.getUserId());
//                    geOuthTokenService.insert(geOuthToken);
//                }else {
//                    geOuthToken1.setUserId(geBaseUser.getUserId());
//                    geOuthToken1.setAccessToken(token);
//                    geOuthTokenService.update(geOuthToken1);
//                }
//                result.setMessage(token);
//                result.setCode(200);
//                result.setData(geBaseUser);
//            }else {
//                GeBaseUser geBaseUser = new GeBaseUser();
//                geBaseUser.setAppletsOpenid(applets_openid);
//                geBaseUser.setWxUnionid(union_id);
//                geBaseUser.setPhone(phone);
//                geBaseUser.setUsername(phone);
//                geBaseUser.setDelFlag(0);
//                geBaseUserService.insert(geBaseUser);
//                GeBaseUserRole geBaseUserRole = new GeBaseUserRole();
//                geBaseUserRole.setUserId(geBaseUser.getUserId());
//                geBaseUserRole.setRoleId(29);
//                geBaseUserRoleService.insert(geBaseUserRole);
//                String token= TokenUtil.sign(geBaseUser);
//                GeOuthToken geOuthToken = new GeOuthToken();
//                geOuthToken.setAccessToken(token);
//                geOuthToken.setUserId(geBaseUser.getUserId());
//                geOuthTokenService.insert(geOuthToken);
////                addRetailinfo(geBaseUser);
//                result.setMessage(token);
//                result.setCode(200);
//                result.setData(geBaseUser);
//            }
//        }catch (Exception e){
//            e.printStackTrace();
//            result.setCode(500);
//        }
//        return result;
//    }
//    /**
//     * 微信小程序授权注册接口
//     */
//    @PostMapping(value = "/registeredByAppletsWx")
//    public CommonResult<GeBaseUser> registeredByAppletsWx(String phone,String applets_openid,String union_id){
//        CommonResult<GeBaseUser> result = new CommonResult<>();
//        try{
//
//            List<GeBaseUser> list=geBaseUserService.getUserByPhone(phone);
//            if (list!=null&&list.size()>0){
//                GeBaseUser geBaseUser=list.get(0);
//                geBaseUser.setAppletsOpenid(applets_openid);
//                geBaseUser.setWxUnionid(union_id);
//                geBaseUserService.update(geBaseUser);
//                if (geBaseUser.getIdCard()!=null){
//                    String decodedData = RSAUtils.privateDecrypt(geBaseUser.getIdCard(), RSAUtils.getPrivateKey(prKey));
//                    geBaseUser.setIdCard(decodedData);
//                }
//                String token= TokenUtil.sign(geBaseUser);
//                GeOuthToken geOuthToken1=geOuthTokenService.queryById(token);
//                if (geOuthToken1==null){
//                    GeOuthToken geOuthToken = new GeOuthToken();
//                    geOuthToken.setAccessToken(token);
//                    geOuthToken.setUserId(geBaseUser.getUserId());
//                    geOuthTokenService.insert(geOuthToken);
//                }else {
//                    geOuthToken1.setUserId(geBaseUser.getUserId());
//                    geOuthToken1.setAccessToken(token);
//                    geOuthTokenService.update(geOuthToken1);
//                }
//                result.setMessage(token);
//                result.setCode(200);
//                result.setData(geBaseUser);
//            }else {
//                GeBaseUser geBaseUser = new GeBaseUser();
//                geBaseUser.setAppletsOpenid(applets_openid);
//                geBaseUser.setWxUnionid(union_id);
//                geBaseUser.setPhone(phone);
//                geBaseUser.setUsername(phone);
//                geBaseUser.setDelFlag(0);
//                geBaseUserService.insert(geBaseUser);
//                GeBaseUserRole geBaseUserRole = new GeBaseUserRole();
//                geBaseUserRole.setUserId(geBaseUser.getUserId());
//                geBaseUserRole.setRoleId(29);
//                geBaseUserRoleService.insert(geBaseUserRole);
//                String token= TokenUtil.sign(geBaseUser);
//                GeOuthToken geOuthToken = new GeOuthToken();
//                geOuthToken.setAccessToken(token);
//                geOuthToken.setUserId(geBaseUser.getUserId());
//                geOuthTokenService.insert(geOuthToken);
//                addRetailinfo(geBaseUser);
//                result.setMessage(token);
//                result.setCode(200);
//                result.setData(geBaseUser);
//            }
//        }catch (Exception e){
//            e.printStackTrace();
//            result.setCode(500);
//        }
//        return result;
//    }
//
//
//    //--------------------------  用户登录  -----------------------------------
//
//    /**
//     * 通过手机号、短信验证码登录
//     */
//    @PostMapping(value = "/loginByCode")
//    public CommonResult<GeBaseUser> loginByCode(String phone,String code){
//        CommonResult<GeBaseUser> result = new CommonResult<>();
//        try {
////            String query="select * from ge_verification_code where phone="+phone;
//            List<Map<String,Object>> list=jdbcTemplate.queryForList("select * from ge_verification_code where phone=?",new Object[]{phone});
//            if (list==null||list.size()==0){
//                result.setCode(300);
//                result.setMessage("验证码已失效");
//                return result;
//            }
//            String cod=list.get(0).get("code").toString();
//            if (!cod.equals(code)){
//                result.setCode(300);
//                result.setMessage("验证码错误");
//                return result;
//            }
//            List<GeBaseUser> ulist=geBaseUserService.getUserByPhone(phone);
//            if (ulist!=null&& ulist.size()>0){
//                GeBaseUser geBaseUser=ulist.get(0);
////                geBaseUserService.update(geBaseUser);
//                if (geBaseUser.getIdCard()!=null){
//                    String decodedData = RSAUtils.privateDecrypt(geBaseUser.getIdCard(), RSAUtils.getPrivateKey(prKey));
//                    geBaseUser.setIdCard(decodedData);
//                }
//               /* List<GeBaseUserRole> rlist=geBaseUserRoleService.getUserRoleByUserId(geBaseUser.getUserId());
//                String urs="";
//                for (GeBaseUserRole geBaseUserRole:rlist){
//                    urs+=geBaseUserRole.getRoleId()+",";
//                }
//                geBaseUser.setRoleId(urs);*/
//                if (geBaseUser.getDelFlag()!=null&&geBaseUser.getDelFlag()!=0){
//                    result.setCode(300);
//                    result.setMessage("账号未启用，请联系管理员");
//                    return result;
//                }
//                String token= TokenUtil.sign(geBaseUser);
//                GeOuthToken geOuthToken1=geOuthTokenService.queryById(token);
//                if (geOuthToken1==null){
//                    GeOuthToken geOuthToken = new GeOuthToken();
//                    geOuthToken.setAccessToken(token);
//                    geOuthToken.setUserId(geBaseUser.getUserId());
//                    geOuthTokenService.insert(geOuthToken);
//                }else {
//                    geOuthToken1.setUserId(geBaseUser.getUserId());
//                    geOuthToken1.setAccessToken(token);
//                    geOuthTokenService.update(geOuthToken1);
//                }
//                result.setCode(200);
//                result.setData(geBaseUser);
//                result.setMessage(token);
//                return result;
//            }else {
//                GeBaseUser geBaseUser = new GeBaseUser();
//                geBaseUser.setPhone(phone);
//                geBaseUser.setUsername(phone);
//                geBaseUser.setDelFlag(0);
//                geBaseUserService.insert(geBaseUser);
//                GeBaseUserRole geBaseUserRole = new GeBaseUserRole();
//                geBaseUserRole.setUserId(geBaseUser.getUserId());
//                geBaseUserRole.setRoleId(29);
//                geBaseUserRoleService.insert(geBaseUserRole);
//               /* GeBaseUserRole geBaseUserRole = new GeBaseUserRole();
//                geBaseUserRole.setRoleId(0);
//                geBaseUserRole.setUserId(geBaseUser.getUserId());
//                geBaseUserRoleService.insert(geBaseUserRole);
//                geBaseUser.setRoleId("0,");*/
//                String token= TokenUtil.sign(geBaseUser);
//                GeOuthToken geOuthToken = new GeOuthToken();
//                geOuthToken.setAccessToken(token);
//                geOuthToken.setUserId(geBaseUser.getUserId());
//                geOuthTokenService.insert(geOuthToken);
//                result.setMessage(token);
//                result.setCode(200);
//                result.setData(geBaseUser);
//            }
//        }catch (Exception e){
//            e.printStackTrace();
//            result.setCode(500);
//        }
//        return result;
//    }
//
//    /**
//     * 手机号、密码登录
//     */
//    @PostMapping(value = "/loginByPwd")
//    public CommonResult<JSONObject> loginByPwd(){
//        CommonResult<JSONObject> result = new CommonResult<>();
//        return result;
//    }
//
    /**
     * 用户登录
     */
    @PostMapping(value = "/userlogin")
    @SecurityParameter
    public CommonResult<GeBaseUser> userLogin(@RequestBody String s) throws InvalidKeySpecException, NoSuchAlgorithmException {
        CommonResult<GeBaseUser> result = new CommonResult<>();
        try {
            String phone=JSON.parseObject(s).getString("phone");
            String password=JSON.parseObject(s).getString("password");
            List<GeBaseUser> ulist=geBaseUserService.getUserByPhone(phone);
            if (ulist==null||ulist.size()==0){
                result.setCode(300);
                result.setMessage("该手机号未注册！");
                return  result;
            }
            GeBaseUser geBaseUser=ulist.get(0);
            if (geBaseUser.getDelFlag()!=null&&geBaseUser.getDelFlag()!=0){
                result.setCode(300);
                result.setMessage("账号未启用，请联系管理员");
                return result;
            }
            if (geBaseUser.getPassword()==null){
                result.setCode(300);
                result.setMessage("未设置密码，请用验证码登陆");
                return result;
            }
            String pwd = RSAUtils.privateDecrypt(geBaseUser.getPassword(), RSAUtils.getPrivateKey(prKey));
//            String pwd= RSAUtils.publicEncrypt(password,RSAUtils.getPublicKey(pubKey));
            if (pwd.equals(password)){
                if (geBaseUser.getIdCard()!=null){
                    String decodedData = RSAUtils.privateDecrypt(geBaseUser.getIdCard(), RSAUtils.getPrivateKey(prKey));
                    geBaseUser.setIdCard(decodedData);
                }
                List<GeBaseUserRole> rlist=geBaseUserRoleService.getUserRoleByUserId(geBaseUser.getUserId());
                String urs="";
                for (GeBaseUserRole geBaseUserRole:rlist){
                    urs+=geBaseUserRole.getRoleId()+",";
                }
                geBaseUser.setRoleId(String.valueOf(rlist.get(0).getRoleId()));
                //获取角色名称
                GeBaseRole geBaseRole = geBaseRoleService.queryById(rlist.get(0).getRoleId());
                geBaseUser.setRoleName(geBaseRole.getRoleName());

                //部门
                GeBaseUser userById = geBaseUserService.getUserById(geBaseUser.getUserId());
                if(userById.getDeptId()!=null){
                    GeBaseDepart byId = geBaseDepartService.getById(userById.getDeptId());
                    geBaseUser.setDeptName(byId.getDepartName());
                }
                geBaseUser.setDeptId(userById.getDeptId());

                String token= TokenUtil.sign(geBaseUser);
                GeOuthToken geOuthToken1=geOuthTokenService.queryById(token);
                if (geOuthToken1==null){
                    GeOuthToken geOuthToken = new GeOuthToken();
                    geOuthToken.setAccessToken(token);
                    geOuthToken.setUserId(geBaseUser.getUserId());
                    geOuthTokenService.insert(geOuthToken);
                }else {
                    geOuthToken1.setUserId(geBaseUser.getUserId());
                    geOuthToken1.setAccessToken(token);
                    geOuthTokenService.update(geOuthToken1);
                }
                result.setCode(200);
                result.setData(geBaseUser);
                result.setMessage(token);
            }else {
                result.setCode(300);
                result.setMessage("密码错误！");
            }
        }catch (Exception e){
            e.printStackTrace();
            result.setCode(500);
            result.setMessage(e.toString());
        }
        return result;
    }

    /**
     * 获取用户角色权限
     */
    @GetMapping(value = "/getUserRoleMenu")
    public CommonResult<List<GeBaseMenu>> getUserRoleMenu(HttpServletRequest request){
        log.info("获取用户权限:{}",request);
        CommonResult<List<GeBaseMenu>> result = new CommonResult<>();
        try {
            String access_token=request.getHeader("access_token");
            System.out.println("access_token:"+access_token);
            GeOuthToken geOuthToken=geOuthTokenService.queryById(access_token);
            Integer userId=geOuthToken.getUserId();
            List<GeBaseUserRole> rlist=geBaseUserRoleService.getUserRoleByUserId(userId);
            String urs="";
            for (GeBaseUserRole geBaseUserRole:rlist){
                urs+=geBaseUserRole.getRoleId()+",";
            }
            if (!urs.equals("")){
                String[] ur=urs.split(",");
                List<GeBaseRoleMenu> mlist=geBaseRoleMenuService.getMenusByRoleIds(ur);
                String menus="";
                for (GeBaseRoleMenu geBaseRoleMenu:mlist){
                    menus+=geBaseRoleMenu.getMenuId()+",";
                }
                if (!menus.equals("")){
                    List<GeBaseMenu> mmlist=geBaseMenuService.getMenusByMenuIds(menus.split(","),0);
                    List<GeBaseMenu> bmlist=node_merge(mmlist,menus,0);
                    result.setData(bmlist);
                    List<GeBaseMenu> gmlist=geBaseMenuService.getMenusByMenuIds(menus.split(","),1);
                    result.setData1(gmlist);
                }
            }
            result.setCode(200);
        }catch (Exception e){
            e.printStackTrace();
            result.setCode(500);
        }
        return result;
    }

    public List<GeBaseMenu> node_merge(List<GeBaseMenu> list,String menus,int parent_id){
        List<GeBaseMenu> geBaseMenuList = new ArrayList<>();
        for (GeBaseMenu geBaseMenu:list){
            if (geBaseMenu.getParentId()==parent_id){
                geBaseMenu.setChildren(node_merge(list,menus,geBaseMenu.getMenuId()));
                if (ArrayUtils.contains(menus.split(","),geBaseMenu.getMenuId().toString())){
                    geBaseMenu.setCheck(true);
                }else {
                    geBaseMenu.setCheck(false);
                }
                geBaseMenuList.add(geBaseMenu);
            }
        }
        return geBaseMenuList;
    }

//    /**
//     * 通过access_token获取用户信息
//     */
//    @GetMapping(value = "/getUserInfoByAccessToken")
//    public CommonResult<Map<String,Object>> getUserInfoByAccessToken(HttpServletRequest request){
//        CommonResult<Map<String, Object>> result = new CommonResult<>();
//        try {
//            String token =request.getHeader("access_token");
//            GeOuthToken geOuthToken=geOuthTokenService.queryById(token);
//            if (geOuthToken!=null){
//                int userId=geOuthToken.getUserId();
//                GeBaseUser geBaseUser=geBaseUserService.queryById(userId);
//                Map<String,Object> map=new HashMap<>();
//                map.put("user_id",geBaseUser.getUserId());
//                map.put("phone",geBaseUser.getPhone());
//                map.put("username",geBaseUser.getUsername());
//                map.put("nickname",geBaseUser.getNickname());
//                map.put("sex",geBaseUser.getSex());
//                map.put("birthday",geBaseUser.getBirthday());
//                map.put("create_time",geBaseUser.getCreateTime());
//                map.put("age",geBaseUser.getAge());
//                map.put("avatar",geBaseUser.getAvatar());
//                if (geBaseUser.getIdCard()!=null){
//                    String decodedData = RSAUtils.privateDecrypt(geBaseUser.getIdCard(), RSAUtils.getPrivateKey(prKey));
//                    map.put("id_card",decodedData);
//                }else {
//                    map.put("id_card",null);
//                }
//                result.setCode(200);
//                result.setData(map);
//            }else {
//                result.setCode(500);
//            }
//
//        }catch (Exception e){
//            e.printStackTrace();
//            result.setCode(500);
//        }
//        return  result;
//    }
//
//    /**
//     * 通过access_token获取用户具体信息
//     */
//    @GetMapping(value = "/getUserInfoByToken")
//    public CommonResult<GeBaseUser> getUserInfoByToken(HttpServletRequest request){
//        CommonResult<GeBaseUser> result = new CommonResult<>();
//        try {
//            String token =request.getHeader("access_token");
//            GeOuthToken geOuthToken=geOuthTokenService.queryById(token);
//            if (geOuthToken!=null){
//                int userId=geOuthToken.getUserId();
//                GeBaseUser geBaseUser=geBaseUserService.queryById(userId);
//                if (geBaseUser.getIdCard()!=null){
//                    String decodedData = RSAUtils.privateDecrypt(geBaseUser.getIdCard(), RSAUtils.getPrivateKey(prKey));
//                    geBaseUser.setIdCard(decodedData);
//                }else {
//                    geBaseUser.setIdCard(null);
//                }
//                result.setCode(200);
//                result.setData(geBaseUser);
//            }else {
//                result.setCode(500);
//            }
//
//        }catch (Exception e){
//            e.printStackTrace();
//            result.setCode(500);
//        }
//        return  result;
//    }
//
//    /**
//     * 同步会员数据
//     */
//    @PostMapping(value = "/addRetailinfo")
//    public CommonResult<String> addRetailinfo(@RequestBody GeBaseUser geBaseUser){
//        CommonResult<String> result1 = new CommonResult<>();
//        net.sf.json.JSONObject bodyParams = new net.sf.json.JSONObject();
//        // 公共参数
//        bodyParams.put("appKey", "chinaumsandroidpos");
//        bodyParams.put("methodVer", "1.0");
//        bodyParams.put("nonceStr", "D1K2");
//
//        //业务参数
//        bodyParams.put("branId", branId);
//        bodyParams.put("mobileNo", geBaseUser.getPhone());
//        bodyParams.put("vipName", geBaseUser.getUsername());
//
//
//        String signKey = "xyz123";
//        List<org.apache.http.Header> headerList=new ArrayList<Header>();
//        BasicHeader header=new BasicHeader("signKey", signKey);
//        headerList.add(header);
//
//        bodyParams.put("sign", SHAUtils.getSign(bodyParams, signKey, "UTF-8"));
////        System.out.println(bodyParams.toString());
//        //String result = testPost(url, bodyParams.toString(), signKey);
//
//        StringEntity jsonEntity = new StringEntity(bodyParams.toString(), ContentType.APPLICATION_JSON);
//        String result=SHAUtils.testPost(regUrl,jsonEntity,(org.apache.http.Header[])headerList.toArray(new BasicHeader[0]));
//        JSONObject jsonObject=JSON.parseObject(result);
//        if (jsonObject.getString("vipCard")!=null){
//            if (jsonObject.getJSONObject("vipCard").getString("typeId")!=null){
//                if(geBaseUserRetailService.queryById(geBaseUser.getUserId())==null){
//                    GeBaseUserRetail geBaseUserRetail = new GeBaseUserRetail();
//                    geBaseUserRetail.setUserId(geBaseUser.getUserId());
//                    geBaseUserRetail.setTypeid(jsonObject.getJSONObject("vipCard").getInteger("typeId"));
//                    geBaseUserRetailService.insert(geBaseUserRetail);
//                }
//            }
//        }else {
//            result1.setCode(500);
//            return result1;
//        }
//        result1.setCode(200);
//        return result1;
//    }
//
//
//    /**
//     * 查询会员信息
//     */
//    @PostMapping(value = "/vipQueryApi")
//    @SecurityParameter
//    public CommonResult<JSONObject> vipQueryApi(@RequestBody String s){
//        CommonResult<JSONObject> result1 = new CommonResult<>();
//        try {
//            String mobileNo=JSON.parseObject(s).getString("mobileNo");
//            net.sf.json.JSONObject bodyParams = new net.sf.json.JSONObject();
//            // 公共参数
//            bodyParams.put("appKey", "chinaumsandroidpos");
//            bodyParams.put("methodVer", "1.0");
//            bodyParams.put("nonceStr", "D1K2");
//
//            //业务参数
//            bodyParams.put("mobileNo", mobileNo);
//
//
//            String signKey = "xyz123";
//            List<org.apache.http.Header> headerList=new ArrayList<Header>();
//            BasicHeader header=new BasicHeader("signKey", signKey);
//            headerList.add(header);
//
//            bodyParams.put("sign", SHAUtils.getSign(bodyParams, signKey, "UTF-8"));
////            System.out.println(bodyParams.toString());
//            //String result = testPost(url, bodyParams.toString(), signKey);
//
//            StringEntity jsonEntity = new StringEntity(bodyParams.toString(), ContentType.APPLICATION_JSON);
//            String result=SHAUtils.testPost(queryUrl,jsonEntity,(org.apache.http.Header[])headerList.toArray(new BasicHeader[0]));
//            JSONObject jsonObject=JSON.parseObject(result);
//            if (jsonObject.getString("resultCode").equals("v001")){
//                GeBaseUser geBaseUser=geBaseUserService.getUserByPhone(mobileNo).get(0);
//                CommonResult<String> result2=addRetailinfo(geBaseUser);
//                if (result2.getCode()==200){
//                    return vipQueryApi(s);
//                }
//            }else {
//                result1.setCode(200);
//                result1.setData(JSON.parseObject(result));
//            }
////            System.out.println(result);
//        }catch (Exception e){
//            e.printStackTrace();
//            result1.setCode(500);
//        }
//
//        return result1;
//    }

//    /**
//     * 查询会员信息
//     */
//    @PostMapping(value = "/vipQueryApiWx")
//    @SecurityParameter
//    public CommonResult<JSONObject> vipQueryApiWx(@RequestBody String s){
//        CommonResult<JSONObject> result1 = new CommonResult<>();
//        try {
//            String mobileNo=JSON.parseObject(s).getString("mobileNo");
//            net.sf.json.JSONObject bodyParams = new net.sf.json.JSONObject();
//            // 公共参数
//            bodyParams.put("appKey", "chinaumsandroidpos");
//            bodyParams.put("methodVer", "1.0");
//            bodyParams.put("nonceStr", "D1K2");
//
//            //业务参数
//            bodyParams.put("mobileNo", mobileNo);
//
//
//            String signKey = "xyz123";
//            List<org.apache.http.Header> headerList=new ArrayList<Header>();
//            BasicHeader header=new BasicHeader("signKey", signKey);
//            headerList.add(header);
//
//            bodyParams.put("sign", SHAUtils.getSign(bodyParams, signKey, "UTF-8"));
////            System.out.println(bodyParams.toString());
//            //String result = testPost(url, bodyParams.toString(), signKey);
//
//            StringEntity jsonEntity = new StringEntity(bodyParams.toString(), ContentType.APPLICATION_JSON);
//            String result=SHAUtils.testPost(queryUrl,jsonEntity,(org.apache.http.Header[])headerList.toArray(new BasicHeader[0]));
//            JSONObject jsonObject=JSON.parseObject(result);
//            if (jsonObject.getString("resultCode").equals("v001")){
//                GeBaseUser geBaseUser=geBaseUserService.getUserByPhone(mobileNo).get(0);
//                CommonResult<String> result2=addRetailinfo(geBaseUser);
//                if (result2.getCode()==200){
//                    return vipQueryApiWx(mobileNo);
//                }
//            }else {
//                result1.setCode(200);
//                result1.setData(JSON.parseObject(result));
//            }
//
////            System.out.println(result);
//        }catch (Exception e){
//            e.printStackTrace();
//            result1.setCode(500);
//        }
//
//        return result1;
//    }
//
//    public String deleteRetailinfo(GeBaseUser geBaseUser){
//        net.sf.json.JSONObject bodyParams = new net.sf.json.JSONObject();
//        // 公共参数
//        bodyParams.put("appKey", "chinaumsandroidpos");
//        bodyParams.put("methodVer", "1.0");
//        bodyParams.put("nonceStr", "D1K2");
//
//        //业务参数
//        bodyParams.put("mobileNo", geBaseUser.getPhone());
//
//
//        String signKey = "xyz123";
//        List<org.apache.http.Header> headerList=new ArrayList<Header>();
//        BasicHeader header=new BasicHeader("signKey", signKey);
//        headerList.add(header);
//
//        bodyParams.put("sign", SHAUtils.getSign(bodyParams, signKey, "UTF-8"));
////        System.out.println(bodyParams.toString());
//        //String result = testPost(url, bodyParams.toString(), signKey);
//
//        StringEntity jsonEntity = new StringEntity(bodyParams.toString(), ContentType.APPLICATION_JSON);
//        String result=SHAUtils.testPost(deleteUrl,jsonEntity,(org.apache.http.Header[])headerList.toArray(new BasicHeader[0]));
////        System.out.println(result);
//        return result;
//    }

//    /**
//     * 获取指定用户/会员的消费订单列表接口
//     * @return
//     */
//    @PostMapping(value = "/vipTransQuery")
//    @SecurityParameter
//    public CommonResult<JSONObject> vipTransQuery(@RequestBody String s){
//        CommonResult<JSONObject> result = new CommonResult<>();
//        try {
//            String mobileNo=JSON.parseObject(s).getString("mobileNo");
//            String timeBegin=JSON.parseObject(s).getString("timeBegin");
//            String timeEnd=JSON.parseObject(s).getString("timeEnd");
//            String pageNo=JSON.parseObject(s).getString("pageNo");
//            String pageSize=JSON.parseObject(s).getString("pageSize");
//            net.sf.json.JSONObject bodyParams = new net.sf.json.JSONObject();
//            // 公共参数
//            bodyParams.put("appKey", "chinaumsandroidpos");
//            bodyParams.put("methodVer", "1.0");
//            bodyParams.put("nonceStr", "D1K2");
//
//            //业务参数
//            bodyParams.put("mobileNo", mobileNo);
//            bodyParams.put("timeBegin", timeBegin);
//            bodyParams.put("timeEnd", timeEnd);
//            bodyParams.put("pageNo", pageNo);
//            bodyParams.put("pageSize", pageSize);
//
//
//            String signKey = "xyz123";
//            List<org.apache.http.Header> headerList=new ArrayList<Header>();
//            BasicHeader header=new BasicHeader("signKey", signKey);
//            headerList.add(header);
//
//            bodyParams.put("sign", SHAUtils.getSign(bodyParams, signKey, "UTF-8"));
////            System.out.println(bodyParams.toString());
//            //String result = testPost(url, bodyParams.toString(), signKey);
//
//            StringEntity jsonEntity = new StringEntity(bodyParams.toString(), ContentType.APPLICATION_JSON);
//            String res=SHAUtils.testPost(transQuery,jsonEntity,(org.apache.http.Header[])headerList.toArray(new BasicHeader[0]));
//            result.setCode(200);
//            result.setData(JSON.parseObject(res));
//        }catch (Exception e){
//            e.printStackTrace();
//            result.setCode(500);
//        }
//        return result;
//    }

//    /**
//     * 获取指定订单号的消费订单详情接口
//     */
//    @GetMapping("/getTranInfo")
//    public CommonResult<JSONObject> getTranInfo(String tranId){
//        CommonResult<JSONObject> result1 = new CommonResult<>();
//        try {
//            net.sf.json.JSONObject bodyParams = new net.sf.json.JSONObject();
//            // 公共参数
//            bodyParams.put("appKey", "chinaumsandroidpos");
//            bodyParams.put("methodVer", "1.0");
//            bodyParams.put("nonceStr", "D1K2");
//
//            //业务参数
//            bodyParams.put("tranId", tranId);
//
//
//            String signKey = "xyz123";
//            List<org.apache.http.Header> headerList=new ArrayList<Header>();
//            BasicHeader header=new BasicHeader("signKey", signKey);
//            headerList.add(header);
//
//            bodyParams.put("sign", SHAUtils.getSign(bodyParams, signKey, "UTF-8"));
////            System.out.println(bodyParams.toString());
//            //String result = testPost(url, bodyParams.toString(), signKey);
//
//            StringEntity jsonEntity = new StringEntity(bodyParams.toString(), ContentType.APPLICATION_JSON);
//            String result=SHAUtils.testPost(tranInfo,jsonEntity,(org.apache.http.Header[])headerList.toArray(new BasicHeader[0]));
////            System.out.println(result);
//            result1.setCode(200);
//            result1.setData(JSON.parseObject(result));
//        }catch (Exception e){
//            e.printStackTrace();
//            result1.setCode(500);
//        }
//
//        return result1;
//    }

//    /**
//     * 礼金券规则列表获取接口
//     */
//    @PostMapping("/exGiftRule")
//    @SecurityParameter
//    public CommonResult<JSONObject> exGiftRule(@RequestBody String s){
//        CommonResult<JSONObject> result1 = new CommonResult<>();
//        try {
//            Integer userId=JSON.parseObject(s).getInteger("userId");
////            GeBaseUserRetail geBaseUserRetail=geBaseUserRetailService.queryById(userId);
//            GeBaseUser geBaseUser=geBaseUserService.queryById(userId);
//            JSONObject jsonObject = new JSONObject();
//            jsonObject.put("mobileNo",geBaseUser.getPhone());
//            CommonResult<JSONObject> rt=vipQueryApi(jsonObject.toJSONString());
//            Integer typeId=rt.getData().getJSONObject("vipCard").getInteger("typeId");
//            net.sf.json.JSONObject bodyParams = new net.sf.json.JSONObject();
//            // 公共参数
//            bodyParams.put("appKey", "chinaumsandroidpos");
//            bodyParams.put("methodVer", "1.0");
//            bodyParams.put("nonceStr", "D1K2");
//
//            //业务参数
//            bodyParams.put("branId", branId);
//            bodyParams.put("typeId", typeId);
//
//
//            String signKey = "xyz123";
//            List<org.apache.http.Header> headerList=new ArrayList<Header>();
//            BasicHeader header=new BasicHeader("signKey", signKey);
//            headerList.add(header);
//
//            bodyParams.put("sign", SHAUtils.getSign(bodyParams, signKey, "UTF-8"));
////            System.out.println(bodyParams.toString());
//            //String result = testPost(url, bodyParams.toString(), signKey);
//
//            StringEntity jsonEntity = new StringEntity(bodyParams.toString(), ContentType.APPLICATION_JSON);
//            String result=SHAUtils.testPost(giftRule,jsonEntity,(org.apache.http.Header[])headerList.toArray(new BasicHeader[0]));
//            result1.setCode(200);
//            result1.setData(JSON.parseObject(result));
//        }catch (Exception e){
//            e.printStackTrace();
//            result1.setCode(500);
//        }
//
//        return result1;
//    }

//    /**
//     * 礼金券兑换接口
//     */
//    @GetMapping("/giftExchangeApi")
//    public CommonResult<JSONObject> giftExchangeApi(String rdid,String pluId,String mobileNo,int qty){
//        CommonResult<JSONObject> result1 = new CommonResult<>();
//        try {
//            net.sf.json.JSONObject bodyParams = new net.sf.json.JSONObject();
//            // 公共参数
//            bodyParams.put("appKey", "chinaumsandroidpos");
//            bodyParams.put("methodVer", "1.0");
//            bodyParams.put("nonceStr", "D1K2");
//
//            //业务参数
//            bodyParams.put("mobileNo", mobileNo);
//            bodyParams.put("pluId", pluId);
//            bodyParams.put("qty", qty);
//            bodyParams.put("rdid", rdid);
//
//
//
//            String signKey = "xyz123";
//            List<org.apache.http.Header> headerList=new ArrayList<Header>();
//            BasicHeader header=new BasicHeader("signKey", signKey);
//            headerList.add(header);
//
//            bodyParams.put("sign", SHAUtils.getSign(bodyParams, signKey, "UTF-8"));
////            System.out.println(bodyParams.toString());
//            //String result = testPost(url, bodyParams.toString(), signKey);
//
//            StringEntity jsonEntity = new StringEntity(bodyParams.toString(), ContentType.APPLICATION_JSON);
//            String result=SHAUtils.testPost(giftExchange,jsonEntity,(org.apache.http.Header[])headerList.toArray(new BasicHeader[0]));
////            System.out.println(result);
//            result1.setCode(200);
//            result1.setData(JSON.parseObject(result));
//        }catch (Exception e){
//            e.printStackTrace();
//            result1.setCode(500);
//        }
//
//        return result1;
//    }
//    /**
//     * 个人礼金券获取接口
//     */
//    @PostMapping("/vipCouponQueryApi")
//    @SecurityParameter
//    public CommonResult<JSONObject> vipCouponQueryApi(@RequestBody String s){
//        CommonResult<JSONObject> result1 = new CommonResult<>();
//        try {
//            String mobileNo=JSON.parseObject(s).getString("mobileNo");
//            net.sf.json.JSONObject bodyParams = new net.sf.json.JSONObject();
//            // 公共参数
//            bodyParams.put("appKey", "chinaumsandroidpos");
//            bodyParams.put("methodVer", "1.0");
//            bodyParams.put("nonceStr", "D1K2");
//
//            //业务参数
//            bodyParams.put("mobileNo", mobileNo);
//
//
//
//
//            String signKey = "xyz123";
//            List<org.apache.http.Header> headerList=new ArrayList<Header>();
//            BasicHeader header=new BasicHeader("signKey", signKey);
//            headerList.add(header);
//
//            bodyParams.put("sign", SHAUtils.getSign(bodyParams, signKey, "UTF-8"));
////            System.out.println(bodyParams.toString());
//            //String result = testPost(url, bodyParams.toString(), signKey);
//
//            StringEntity jsonEntity = new StringEntity(bodyParams.toString(), ContentType.APPLICATION_JSON);
//            String result=SHAUtils.testPost(vipCoupon,jsonEntity,(org.apache.http.Header[])headerList.toArray(new BasicHeader[0]));
////            System.out.println(result);
//            result1.setCode(200);
//            result1.setData(JSON.parseObject(result));
//        }catch (Exception e){
//            e.printStackTrace();
//            result1.setCode(500);
//        }
//
//        return result1;
//    }

//    /**
//     * 个人礼金券获取接口
//     */
//    @PostMapping("/vipCouponQueryApiWx")
//    @SecurityParameter
//    public CommonResult<JSONObject> vipCouponQueryApiWx(@RequestBody String s){
//        CommonResult<JSONObject> result1 = new CommonResult<>();
//        try {
//            String mobileNo=JSON.parseObject(s).getString("mobileNo");
//            net.sf.json.JSONObject bodyParams = new net.sf.json.JSONObject();
//            // 公共参数
//            bodyParams.put("appKey", "chinaumsandroidpos");
//            bodyParams.put("methodVer", "1.0");
//            bodyParams.put("nonceStr", "D1K2");
//
//            //业务参数
//            bodyParams.put("mobileNo", mobileNo);
//
//
//
//
//            String signKey = "xyz123";
//            List<org.apache.http.Header> headerList=new ArrayList<Header>();
//            BasicHeader header=new BasicHeader("signKey", signKey);
//            headerList.add(header);
//
//            bodyParams.put("sign", SHAUtils.getSign(bodyParams, signKey, "UTF-8"));
////            System.out.println(bodyParams.toString());
//            //String result = testPost(url, bodyParams.toString(), signKey);
//
//            StringEntity jsonEntity = new StringEntity(bodyParams.toString(), ContentType.APPLICATION_JSON);
//            String result=SHAUtils.testPost(vipCoupon,jsonEntity,(org.apache.http.Header[])headerList.toArray(new BasicHeader[0]));
////            System.out.println(result);
//            result1.setCode(200);
//            result1.setData(JSON.parseObject(result));
//        }catch (Exception e){
//            e.printStackTrace();
//            result1.setCode(500);
//        }
//
//        return result1;
//    }

    public static String getID_X(Long id,int length){
        char[] c=new char[length];
        for (int i=0;i<c.length;i++){
            c[i]='0';
        }
        String s=new String(c);
        java.text.DecimalFormat df=new DecimalFormat(s);
        return df.format(s);
    }

    public String getsecretCardNoForTime(String cardNo) throws Exception {
        String ts= DateUtils.dateToStr(new Date(),"HHmmss");
        String codeKey=cardNo+ts;
        CRC32 crc32=new CRC32();
        crc32.update(codeKey.getBytes());
        StringBuffer st=new StringBuffer();
        long crcValue=crc32.getValue();
        String crcStr=String.valueOf(crcValue);
        st.append((crcValue<100000)?getID_X(crcValue,6):crcStr.substring(0,6));
        st.insert(3,codeKey);
        return st.toString();
    }
//
//    /**
//     * 生成二维码
//     */
//    @GetMapping("/getQrCode")
//    public CommonResult<String> getQrCode(String mobileNo){
//        CommonResult<String> result = new CommonResult<>();
//        try {
//            JSONObject jsonObject = new JSONObject();
//            jsonObject.put("mobileNo",mobileNo);
//            CommonResult<JSONObject> rt=vipQueryApi(jsonObject.toJSONString());
//            String vipCode=rt.getData().getJSONObject("vipCard").getString("vipCode");
//            String st=getsecretCardNoForTime(vipCode);
//            result.setData(QRCodeUtil.getBase64QRCode(st, ""));
//            result.setCode(200);
//        }catch (Exception e){
//            e.printStackTrace();
//            result.setCode(500);
//        }
//        return result;
//    }

//    /**
//     * 生成礼金卷二维码
//     */
//    @GetMapping("/getTicketCode")
//    public CommonResult<String> getTicketCode(String ticketCode){
//        CommonResult<String> result = new CommonResult<>();
//        try {
//            String st=getsecretCardNoForTime(ticketCode);
//            result.setData(QRCodeUtil.getBase64QRCode(st, ""));
//            result.setCode(200);
//        }catch (Exception e){
//            e.printStackTrace();
//            result.setCode(500);
//        }
//        return result;
//    }

//    /**
//     * 检查开具发票状态
//     */
//    @GetMapping("/checkInvoice")
//    public CommonResult<JSONObject> checkInvoice(String merOrderId){
//        CommonResult<JSONObject> result = new CommonResult<>();
//        try {
//            GeInvoiceStatus geInvoiceStatus=geInvoiceStatusService.queryById(merOrderId);
//            if (geInvoiceStatus!=null&&geInvoiceStatus.getStatus()==1){
//                JSONObject jsonObject = new JSONObject();
//                jsonObject.put("qrCode",geInvoiceStatus.getBillUrl());
//                result.setCode(200);
//                result.setData(jsonObject);
//            }else if (geInvoiceStatus==null){
//                result.setCode(400);
//            }
//        }catch (Exception e){
//            e.printStackTrace();
//            result.setCode(500);
//        }
//        return result;
//    }

//    /**
//     * 开具发票
//     */
//   @PostMapping("/invoice")
//   public CommonResult<JSONObject> invoice(@RequestBody Bill bill){
//       CommonResult<JSONObject> result = new CommonResult<>();
//       try {
//           /*String s="[\n" +
//                   "        {\n" +
//                   "            \"index\":\"1\",\n" +
//                   "            \"attribute\":\"0\",\n" +
//                   "            \"discountIndex\":\"\",\n" +
//                   "            \"name\":\"餐饮服务\",\n" +
//                   "            \"sn\":\"3070401000000000000\",\n" +
//                   "            \"taxRate\":\"6\",\n" +
//                   "            \"priceIncludingTax\":\"178.0\",\n" +
//                   "            \"quantity\":\"1\",\n" +
//                   "            \"unit\":\"\",\n" +
//                   "            \"model\":\"\"\n" +
//                   "        }\n" +
//                   "    ]";
//           bill.setGoodsDetail(JSON.parseArray(s));*/
//
//           /*String s="{\n" +
//                   "    \"buyerTelephone\":\"01081810989\",\n" +
//                   "    \"msgType\":\"issue\",\n" +
//                   "    \"merOrderDate\":\"20210730\",\n" +
//                   "    \"msgId\":\"9c9c330c-a2f4-1abc-95ba-3f51cce3ce67\",\n" +
//                   "    \"buyerTaxCode\":\"914419006681800001\",\n" +
//                   "    \"remark\":\"\",\n" +
//                   "    \"terminalId\":\"00000001\",\n" +
//                   "    \"srcReserve\":\"\",\n" +
//                   "    \"buyerAddress\":\"中国\",\n" +
//                   "    \"notifyEMail\":\"\",\n" +
//                   "    \"deductionAmount\":\"\",\n" +
//                   "    \"merchantId\":\"898000000000066\",\n" +
//                   "    \"invoiceType\":\"PLAIN\",\n" +
//                   "    \"merOrderId\":\"TEST20210730200416156193\",\n" +
//                   "    \"buyerBank\":\"工商银行\",\n" +
//                   "    \"amount\":\"17800\",\n" +
//                   "    \"requestTimestamp\":\"20210730200416\",\n" +
//                   "    \"msgSrc\":\"YUANBOY_LS\",\n" +
//                   "    \"notifyMobileNo\":\"\",\n" +
//                   "    \"invoiceMaterial\":\"ELECTRONIC\",\n" +
//                   "    \"storeId\":\"\",\n" +
//                   "    \"buyerName\":\"测试公司\",\n" +
//                   "    \"buyerAccount\":\"6212264100011335373\",\n" +
//                   "    \"notifyUrl\":\"\",\n" +
//                   "    \"goodsDetail\":[\n" +
//                   "        {\n" +
//                   "            \"index\":\"1\",\n" +
//                   "            \"attribute\":\"0\",\n" +
//                   "            \"discountIndex\":\"\",\n" +
//                   "            \"name\":\"餐饮服务\",\n" +
//                   "            \"sn\":\"3070401000000000000\",\n" +
//                   "            \"taxRate\":\"6\",\n" +
//                   "            \"priceIncludingTax\":\"178.0\",\n" +
//                   "            \"quantity\":\"1\",\n" +
//                   "            \"unit\":\"\",\n" +
//                   "            \"model\":\"\"\n" +
//                   "        }\n" +
//                   "    ]\n" +
//                   "}";*/
//           bill.setMerchantId(merchantId);
//           bill.setMsgSrc(msgSrc);
//           bill.setTerminalId(terminalId);
//           System.out.println(JSON.parseObject(JSON.toJSONString(bill)));
////           String sign=SignUtils.paramsSign(JSON.parseObject(JSON.toJSONString(bill)),bKey);
//           JSONObject jsonObject=JSON.parseObject(JSON.toJSONString(bill));
//           String sign=SignUtils.signWithSha(jsonObject,bKey,"UTF-8");
//           jsonObject.put("sign",sign);
//           HttpRequest httpRequest = new HttpRequest();
//           String rt=httpRequest.doPost(bUrl,jsonObject.toString());
//           System.out.println(rt);
//           JSONObject jsonObject1=JSON.parseObject(rt);
//           if (jsonObject1.getString("resultCode").equals("SUCCESS")){
//               GeInvoiceStatus geInvoiceStatus=geInvoiceStatusService.queryById(bill.getMerOrderId());
//                if (geInvoiceStatus!=null){
//                    geInvoiceStatus.setStatus(1);
//                    geInvoiceStatus.setBillUrl(jsonObject1.getString("qrCode"));
//                    geInvoiceStatusService.update(geInvoiceStatus);
//                }else {
//                    GeInvoiceStatus geInvoiceStatus1 = new GeInvoiceStatus();
//                    geInvoiceStatus1.setOrderNum(bill.getMerOrderId());
//                    geInvoiceStatus1.setStatus(1);
//                    geInvoiceStatus1.setBillUrl(jsonObject1.getString("qrCode"));
//                    geInvoiceStatusService.insert(geInvoiceStatus1);
//                }
//              /*  if (checkInvoiceStatus(bill)) {
//                    result.setCode(200);
//                    result.setData(JSON.parseObject(rt));
//                }else {
//                    result.setCode(300);
//                    result.setMessage("开具发票异常，请稍后再试！");
//                }*/
//               result.setCode(200);
//               result.setData(JSON.parseObject(rt));
//               result.setData1(JSON.parseObject(JSON.toJSONString(bill)));
//           }else {
//               result.setCode(300);
//               result.setMessage(jsonObject1.getString("resultMsg"));
//           }
//
//        }catch (Exception e){
//            e.printStackTrace();
//            result.setCode(500);
//        }
////       System.out.println(bill.toString());
//       return result;
//   }

//   @PostMapping("/checkInvoiceStatus")
//   public CommonResult<JSONObject> checkInvoiceStatus(@RequestBody Bill bill){
//       CommonResult<JSONObject> result = new CommonResult<>();
//       try {
//           JSONObject jsonObject = new JSONObject();
//           jsonObject.put("srcReserve",bill.getSrcReserve());
//           jsonObject.put("msgType","query");
//           jsonObject.put("merOrderDate",sdf.format(new Date()));
//           jsonObject.put("requestTimestamp",sd.format(new Date()));
//           jsonObject.put("merchantId",bill.getMerchantId());
//           jsonObject.put("msgSrc",bill.getMsgSrc());
//           jsonObject.put("msgId",UUID.randomUUID().toString());
//           jsonObject.put("terminalId",bill.getTerminalId());
//           jsonObject.put("merOrderId",bill.getMerOrderId());
//           System.out.println(JSON.parseObject(JSON.toJSONString(bill)));
////           String sign=SignUtils.paramsSign(JSON.parseObject(JSON.toJSONString(bill)),bKey);
//           String sign=SignUtils.signWithSha(jsonObject,bKey,"UTF-8");
//           jsonObject.put("sign",sign);
//           System.out.println(new Date()+"--发送检查发票状态报文---"+jsonObject.toString());
//           HttpRequest httpRequest = new HttpRequest();
//           String rt=httpRequest.doPost(bUrl,jsonObject.toString());
//           System.out.println(new Date()+"--接受发票状态返回---"+rt);
//           JSONObject jsonObject1=JSON.parseObject(rt);
//           /*if (jsonObject1.getString("resultCode").equals("SUCCESS")){
//               if (jsonObject1.getString("status").equals("ISSUED")){
//                   return true;
//               }else {
//                   TimeUnit.SECONDS.sleep(3);
//                   if (checkInvoiceStatus(bill)){
//                       return true;
//                   }
//               }
//           }else {
//               return false;
//           }*/
//           result.setCode(200);
//           result.setData(jsonObject1);
//       }catch (Exception e){
//           e.printStackTrace();
//           result.setCode(500);
//       }
//       return result;
//   }

//    /**
//     * 获取门票订单详情
//     */
//    @GetMapping(value = "/getOrderInfoByOrderNo")
//   public CommonResult<JSONArray> getOrderInfoByOrderNo(String orderNo){
//        CommonResult<JSONArray> result = new CommonResult<>();
//        try {
//            JSONObject jsonObject = new JSONObject();
//            jsonObject.put("orderNo",orderNo);
//            String password = tuserKey;
//            DesPKCS7Encrypter encrypter = new DesPKCS7Encrypter(password.getBytes(), password.getBytes());
//            ByteArrayInputStream bais = new ByteArrayInputStream(jsonObject.toString().getBytes("utf-8"));
//            // 声明加密输出
//            ByteArrayOutputStream baos = new ByteArrayOutputStream();
//            // Base64 加密实例
//            BASE64Encoder base64Encoder = new BASE64Encoder();
//
//            //加密
//            encrypter.encrypt(bais, baos);
//
//            //Base64加密
//            String des = base64Encoder.encode(baos.toByteArray());
//            des = des.replace("\r\n", "");
//            long time1 = System.currentTimeMillis() / 1000;
//            String strs = tuserId + "GetOrderInfoByorderNo" + time1 + "v1.0" + des + tuserKey;
//            String md5 = DigestUtils.md5DigestAsHex(strs.getBytes());
//            String json = "{\"requestHead\":{\"user_id\":\"" + tuserId + "\",\"method\":\"" + "GetOrderInfoByorderNo" + "\"," +
//                    "\"timestamp\":" + time1 + ",\"version\":\"v1.0\",\"sign\":\"" + md5 + "\"}," +
//                    "\"requestBody\":\"" + des + "\"}";
//            String urlString = tUrl;
//            String s= HttpRequest.sendPost(urlString,json);
//            result.setCode(200);
//            if (JSON.parseObject(s).getJSONObject("responseBody").getJSONArray("Table")!=null){
//                result.setData(JSON.parseObject(s).getJSONObject("responseBody").getJSONArray("Table"));
//            }
//        }catch (Exception e){
//            e.printStackTrace();
//            result.setCode(500);
//        }
//        return result;
//    }


}
